home *** CD-ROM | disk | FTP | other *** search
Wrap
/* File: QTStreamingComponents.h Contains: QuickTime interfaces Version: Technology: Release: QuickTime 4.1 Copyright: (c) 1990-1999 by Apple Computer, Inc., all rights reserved Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __QTSTREAMINGCOMPONENTS__ #define __QTSTREAMINGCOMPONENTS__ #ifndef __COMPONENTS__ #include <Components.h> #endif #ifndef __MOVIES__ #include <Movies.h> #endif #ifndef __QUICKTIMESTREAMING__ #include <QuickTimeStreaming.h> #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=mac68k #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif /*============================================================================ Stream Handler ============================================================================*/ /* Server edits are only valid for the current chunk */ struct SHServerEditParameters { UInt32 version; Fixed editRate; TimeValue64 dataStartTime_mediaAxis; TimeValue64 dataEndTime_mediaAxis; }; typedef struct SHServerEditParameters SHServerEditParameters; enum { kSHNoChunkDispatchFlags = 0, kSHChunkFlagSyncSample = 1 << 2, kSHChunkFlagDataLoss = 1 << 4 }; struct SHChunkRecord { UInt32 version; long reserved1; SInt32 flags; UInt32 dataSize; UInt8 * dataPtr; long reserved2; long reserved3; TimeValue64 presentationTime; long reserved4; long reserved5; const SHServerEditParameters * serverEditParameters; long reserved6; long reserved7; }; typedef struct SHChunkRecord SHChunkRecord; /*============================================================================ RTP Components ============================================================================*/ typedef UInt32 RTPSSRC; enum { kRTPInvalidSSRC = 0 }; /* RTP standard content encodings for audio */ enum { kRTPPayload_PCMU = 0, /* 8kHz PCM mu-law mono */ kRTPPayload_1016 = 1, /* 8kHz CELP (Fed Std 1016) mono */ kRTPPayload_G721 = 2, /* 8kHz G.721 ADPCM mono */ kRTPPayload_GSM = 3, /* 8kHz GSM mono */ kRTPPayload_G723 = 4, /* 8kHz G.723 ADPCM mono */ kRTPPayload_DVI_8 = 5, /* 8kHz Intel DVI ADPCM mono */ kRTPPayload_DVI_16 = 6, /* 16kHz Intel DVI ADPCM mono */ kRTPPayload_LPC = 7, /* 8kHz LPC */ kRTPPayload_PCMA = 8, /* 8kHz PCM a-law mono */ kRTPPayload_L16_44_2 = 10, /* 44.1kHz 16-bit linear stereo */ kRTPPayload_L16_44_1 = 11, /* 44.1kHz 16-bit linear mono */ kRTPPayload_PureVoice = 12, /* 8kHz PureVoice mono (QCELP) */ kRTPPayload_MPEGAUDIO = 14, /* MPEG I and II audio */ kRTPPayload_DVI_11 = 16, /* 11kHz Intel DVI ADPCM mono */ kRTPPayload_DVI_22 = 17 /* 22kHz Intel DVI ADPCM mono */ }; /* RTP standard content encodings for video */ enum { kRTPPayload_CELLB = 25, /* Sun CellB */ kRTPPayload_JPEG = 26, /* JPEG */ kRTPPayload_CUSEEME = 27, /* Cornell CU-SeeMe */ kRTPPayload_NV = 28, /* Xerox PARC nv */ kRTPPayload_PICWIN = 29, /* BBN Picture Window */ kRTPPayload_CPV = 30, /* Bolter CPV */ kRTPPayload_H261 = 31, /* CCITT H.261 */ kRTPPayload_MPEGVIDEO = 32, /* MPEG I and II video */ kRTPPayload_H263 = 34 /* CCITT H.263 */ }; /* Other RTP standard content encodings */ enum { kRTPPayload_MPEG2T = 33 /* MPEG 2 Transport */ }; /* Dynamic encodings */ enum { kRTPPayload_FirstDynamic = 96, kRTPPayload_LastDynamic = 127, kRTPPayload_Unknown = 0xFF }; /* ----------------------------------------- RTP Info selectors ----------------------------------------- */ /* ----- these are get and set ----- */ enum { kRTPBufferDelayInfo = FOUR_CHAR_CODE('bufr') /* UInt32 in time scale*/ }; /*----------------------------------------- RTP Statistics -----------------------------------------*/ enum { kRTPTotalReceivedPktsStat = FOUR_CHAR_CODE('trcp'), kRTPTotalLostPktsStat = FOUR_CHAR_CODE('tlsp'), kRTPTotalProcessedPktsStat = FOUR_CHAR_CODE('tprp'), kRTPTotalDroppedPktsStat = FOUR_CHAR_CODE('tdrp'), kRTPBadHeaderDroppedPktsStat = FOUR_CHAR_CODE('bhdp'), kRTPOurHeaderDroppedPktsStat = FOUR_CHAR_CODE('ohdp'), kRTPNotReceivingSenderDroppedPktsStat = FOUR_CHAR_CODE('nsdp'), kRTPNotProcessingDroppedPktsStat = FOUR_CHAR_CODE('npdp'), kRTPBadSeqDroppedPktsStat = FOUR_CHAR_CODE('bsdp'), kRTPArriveTooLatePktsStat = FOUR_CHAR_CODE('artl'), kRTPWaitForSeqDroppedPktsStat = FOUR_CHAR_CODE('wsdp'), kRTPBadStateDroppedPktsStat = FOUR_CHAR_CODE('stdp'), kRTPBadPayloadDroppedPktsStat = FOUR_CHAR_CODE('bpdp'), kRTPNoTimeScaleDroppedPktsStat = FOUR_CHAR_CODE('ntdp'), kRTPDupSeqNumDroppedPktsStat = FOUR_CHAR_CODE('dsdp'), kRTPLostPktsPercentStat = FOUR_CHAR_CODE('lspp'), kRTPDroppedPktsPercentStat = FOUR_CHAR_CODE('dppp'), kRTPTotalUnprocessedPktsPercentStat = FOUR_CHAR_CODE('tupp'), kRTPRTCPDataRateStat = FOUR_CHAR_CODE('rrcd'), kRTPPayloadIDStat = FOUR_CHAR_CODE('rpid'), kRTPPayloadNameStat = FOUR_CHAR_CODE('rpnm'), kRTPNumPktsInQueueStat = FOUR_CHAR_CODE('rnpq'), kRTPTotalPktsInQueueStat = FOUR_CHAR_CODE('rtpq'), kRTPTotalOutOfOrderPktsStat = FOUR_CHAR_CODE('rtoo') }; /*----------------------------------------- Payload Info -----------------------------------------*/ enum { kRTPPayloadSpeedTag = FOUR_CHAR_CODE('sped'), /* 0-255, 255 is fastest*/ kRTPPayloadLossRecoveryTag = FOUR_CHAR_CODE('loss') /* 0-255, 0 can't handle any loss, 128 can handle 50% packet loss*/ }; struct RTPPayloadCharacteristic { OSType tag; long value; }; typedef struct RTPPayloadCharacteristic RTPPayloadCharacteristic; /* pass RTPPayloadSortRequest to QTSFindMediaPacketizer or QTSFindMediaPacketizerForTrack. define the characteristics to sort by. tag is key to sort on. value is positive for ascending sort (low value first), negative for descending sort (high value first). */ struct RTPPayloadSortRequest { long characteristicCount; RTPPayloadCharacteristic characteristic[1]; /* tag is key to sort on, value is + for ascending, - for descending*/ }; typedef struct RTPPayloadSortRequest RTPPayloadSortRequest; typedef RTPPayloadSortRequest * RTPPayloadSortRequestPtr; /* flags for RTPPayloadInfo */ enum { kRTPPayloadTypeStaticFlag = 0x00000001, kRTPPayloadTypeDynamicFlag = 0x00000002 }; struct RTPPayloadInfo { long payloadFlags; UInt8 payloadID; char unused[3]; char payloadName[1]; }; typedef struct RTPPayloadInfo RTPPayloadInfo; typedef RTPPayloadInfo * RTPPayloadInfoPtr; typedef RTPPayloadInfoPtr * RTPPayloadInfoHandle; /*============================================================================ RTP Reassembler ============================================================================*/ typedef ComponentInstance RTPReassembler; enum { kRTPReassemblerType = FOUR_CHAR_CODE('rtpr') }; enum { kRTPBaseReassemblerType = FOUR_CHAR_CODE('gnrc'), kRTP261ReassemblerType = FOUR_CHAR_CODE('h261'), kRTP263ReassemblerType = FOUR_CHAR_CODE('h263'), kRTP263PlusReassemblerType = FOUR_CHAR_CODE('263+'), kRTPAudioReassemblerType = FOUR_CHAR_CODE('soun'), kRTPQTReassemblerType = FOUR_CHAR_CODE('qtim'), kRTPPureVoiceReassemblerType = FOUR_CHAR_CODE('Qclp'), kRTPJPEGReassemblerType = FOUR_CHAR_CODE('jpeg'), kRTPQDesign2ReassemblerType = FOUR_CHAR_CODE('QDM2'), kRTPSorensonReassemblerType = FOUR_CHAR_CODE('SVQ1') }; struct RTPRssmInitParams { RTPSSRC ssrc; UInt8 payloadType; UInt8 pad[3]; TimeBase timeBase; TimeScale timeScale; }; typedef struct RTPRssmInitParams RTPRssmInitParams; struct RTPRssmPacket { struct RTPRssmPacket * next; struct RTPRssmPacket * prev; QTSStreamBuffer * streamBuffer; Boolean paramsFilledIn; UInt8 pad[1]; UInt16 sequenceNum; UInt32 transportHeaderLength; /* filled in by base*/ UInt32 payloadHeaderLength; /* derived adjusts this */ UInt32 dataLength; SHServerEditParameters serverEditParams; TimeValue64 timeStamp; /* lower 32 bits is original rtp timestamp*/ SInt32 chunkFlags; /* these are or'd together*/ SInt32 flags; }; typedef struct RTPRssmPacket RTPRssmPacket; /* flags for RTPRssmPacket struct*/ enum { kRTPRssmPacketHasMarkerBitSet = 0x00000001, kRTPRssmPacketHasServerEditFlag = 0x00010000 }; /* flags for RTPRssmSendStreamBufferRange*/ enum { kRTPRssmCanRefStreamBuffer = 0x00000001 }; /* flags for RTPRssmSendPacketList*/ enum { kRTPRssmLostSomePackets = 0x00000001 }; /* flags for RTPRssmSetFlags*/ enum { kRTPRssmEveryPacketAChunkFlag = 0x00000001, kRTPRssmQueueAndUseMarkerBitFlag = 0x00000002, kRTPRssmTrackLostPacketsFlag = 0x00010000, kRTPRssmNoReorderingRequiredFlag = 0x00020000 }; struct RTPSendStreamBufferRangeParams { QTSStreamBuffer * streamBuffer; TimeValue64 presentationTime; UInt32 chunkStartPosition; UInt32 numDataBytes; SInt32 chunkFlags; SInt32 flags; const SHServerEditParameters * serverEditParams; /* NULL if no edit*/ }; typedef struct RTPSendStreamBufferRangeParams RTPSendStreamBufferRangeParams; /* characteristics*/ enum { kRTPRssmRequiresOrderedPacketsCharacteristic = FOUR_CHAR_CODE('rrop') }; enum { kRTPReassemblerInfoResType = FOUR_CHAR_CODE('rsmi') }; struct RTPReassemblerInfo { long characteristicCount; RTPPayloadCharacteristic characteristic[1]; /* after the last characteristic, the payload name (defined by the MediaPacketizerPayloadInfo*/ /* structure) is present. */ }; typedef struct RTPReassemblerInfo RTPReassemblerInfo; typedef RTPReassemblerInfo * RTPReassemblerInfoPtr; typedef RTPReassemblerInfoPtr * RTPReassemblerInfoHandle; #define RTPReassemblerInfoToPayloadInfo(_rsmi) ((RTPPayloadInfoPtr)(&((_rsmi)->characteristic[(_rsmi)->characteristicCount]))) /* RTPReassemblerInfoElement structs are padded to 32 bits */ enum { kRTPReassemblerInfoPadUpToBytes = 4 }; EXTERN_API_C( OSErr ) QTSFindReassemblerForPayloadID (UInt8 inPayloadID, RTPPayloadSortRequest * inSortInfo, QTAtomContainer * outReassemblerList); EXTERN_API_C( OSErr ) QTSFindReassemblerForPayloadName (const char * inPayloadName, RTPPayloadSortRequest * inSortInfo, QTAtomContainer * outReassemblerList); /*----------------------------------------- RTP Reassembler Selectors -----------------------------------------*/ enum { kRTPRssmSetCapabilitiesSelect = 0x0100, kRTPRssmGetCapabilitiesSelect = 0x0101, kRTPRssmSetPayloadHeaderLengthSelect = 0x0102, kRTPRssmGetPayloadHeaderLengthSelect = 0x0103, kRTPRssmSetTimeScaleSelect = 0x0104, kRTPRssmGetTimeScaleSelect = 0x0105, kRTPRssmNewStreamHandlerSelect = 0x0106, kRTPRssmSetStreamHandlerSelect = 0x0107, kRTPRssmGetStreamHandlerSelect = 0x0108, kRTPRssmSendStreamHandlerChangedSelect = 0x0109, kRTPRssmSetSampleDescriptionSelect = 0x010A, kRTPRssmGetChunkAndIncrRefCountSelect = 0x010D, kRTPRssmSendChunkAndDecrRefCountSelect = 0x010E, kRTPRssmSendLostChunkSelect = 0x010F, kRTPRssmSendStreamBufferRangeSelect = 0x0110, kRTPRssmClearCachedPackets = 0x0111, kRTPRssmFillPacketListParamsSelect = 0x0113, kRTPRssmReleasePacketListSelect = 0x0114, kRTPRssmIncrChunkRefCountSelect = 0x0115, kRTPRssmDecrChunkRefCountSelect = 0x0116, kRTPRssmInitializeSelect = 0x0500, kRTPRssmHandleNewPacketSelect = 0x0501, kRTPRssmComputeChunkSizeSelect = 0x0502, kRTPRssmAdjustPacketParamsSelect = 0x0503, kRTPRssmCopyDataToChunkSelect = 0x0504, kRTPRssmSendPacketListSelect = 0x0505, kRTPRssmGetTimeScaleFromPacketSelect = 0x0506, kRTPRssmSetInfoSelect = 0x0509, kRTPRssmGetInfoSelect = 0x050A, kRTPRssmHasCharacteristicSelect = 0x050B, kRTPRssmResetSelect = 0x050C }; /*----------------------------------------- RTP Reassembler functions - base to derived -----------------------------------------*/ EXTERN_API( ComponentResult ) RTPRssmInitialize (RTPReassembler rtpr, RTPRssmInitParams * inInitParams) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0500, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmHandleNewPacket (RTPReassembler rtpr, QTSStreamBuffer * inStreamBuffer, SInt32 inNumWraparounds) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0501, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmComputeChunkSize (RTPReassembler rtpr, RTPRssmPacket * inPacketListHead, SInt32 inFlags, UInt32 * outChunkDataSize) FIVEWORDINLINE(0x2F3C, 0x000C, 0x0502, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmAdjustPacketParams (RTPReassembler rtpr, RTPRssmPacket * inPacket, SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0503, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmCopyDataToChunk (RTPReassembler rtpr, RTPRssmPacket * inPacketListHead, UInt32 inMaxChunkDataSize, SHChunkRecord * inChunk, SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0504, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmSendPacketList (RTPReassembler rtpr, RTPRssmPacket * inPacketListHead, const TimeValue64 * inLastChunkPresentationTime, SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x000C, 0x0505, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmGetTimeScaleFromPacket (RTPReassembler rtpr, QTSStreamBuffer * inStreamBuffer, TimeScale * outTimeScale) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0506, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmSetInfo (RTPReassembler rtpr, OSType inSelector, void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0509, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmGetInfo (RTPReassembler rtpr, OSType inSelector, void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050A, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmHasCharacteristic (RTPReassembler rtpr, OSType inCharacteristic, Boolean * outHasIt) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050B, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmReset (RTPReassembler rtpr, SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050C, 0x7000, 0xA82A); /*----------------------------------------- RTP Reassembler functions - derived to base -----------------------------------------*/ /* ----- setup*/ EXTERN_API( ComponentResult ) RTPRssmSetCapabilities (RTPReassembler rtpr, SInt32 inFlags, SInt32 inFlagsMask) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0100, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmGetCapabilities (RTPReassembler rtpr, SInt32 * outFlags) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0101, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmSetPayloadHeaderLength (RTPReassembler rtpr, UInt32 inPayloadHeaderLength) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0102, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmGetPayloadHeaderLength (RTPReassembler rtpr, UInt32 * outPayloadHeaderLength) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0103, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmSetTimeScale (RTPReassembler rtpr, TimeScale inSHTimeScale) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0104, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmGetTimeScale (RTPReassembler rtpr, TimeScale * outSHTimeScale) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0105, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmNewStreamHandler (RTPReassembler rtpr, OSType inSHType, SampleDescriptionHandle inSampleDescription, TimeScale inSHTimeScale, ComponentInstance * outHandler) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0106, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmSetStreamHandler (RTPReassembler rtpr, ComponentInstance inStreamHandler) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0107, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmGetStreamHandler (RTPReassembler rtpr, ComponentInstance * outStreamHandler) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0108, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmSendStreamHandlerChanged (RTPReassembler rtpr) FIVEWORDINLINE(0x2F3C, 0x0000, 0x0109, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmSetSampleDescription (RTPReassembler rtpr, SampleDescriptionHandle inSampleDescription) FIVEWORDINLINE(0x2F3C, 0x0004, 0x010A, 0x7000, 0xA82A); /* ----- manually sending chunks*/ EXTERN_API( ComponentResult ) RTPRssmGetChunkAndIncrRefCount (RTPReassembler rtpr, UInt32 inChunkDataSize, const TimeValue64 * inChunkPresentationTime, SHChunkRecord ** outChunk) FIVEWORDINLINE(0x2F3C, 0x000C, 0x010D, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmSendChunkAndDecrRefCount (RTPReassembler rtpr, SHChunkRecord * inChunk, const SHServerEditParameters * inServerEdit) FIVEWORDINLINE(0x2F3C, 0x0008, 0x010E, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmSendLostChunk (RTPReassembler rtpr, const TimeValue64 * inChunkPresentationTime) FIVEWORDINLINE(0x2F3C, 0x0004, 0x010F, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmSendStreamBufferRange (RTPReassembler rtpr, RTPSendStreamBufferRangeParams * inParams) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0110, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmClearCachedPackets (RTPReassembler rtpr, SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0111, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmFillPacketListParams (RTPReassembler rtpr, RTPRssmPacket * inPacketListHead, SInt32 inNumWraparounds, SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x000C, 0x0113, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmReleasePacketList (RTPReassembler rtpr, RTPRssmPacket * inPacketListHead) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0114, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmIncrChunkRefCount (RTPReassembler rtpr, SHChunkRecord * inChunk) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0115, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPRssmDecrChunkRefCount (RTPReassembler rtpr, SHChunkRecord * inChunk) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0116, 0x7000, 0xA82A); /*============================================================================ RTP Media Packetizer ============================================================================*/ enum { kRTPMediaPacketizerType = FOUR_CHAR_CODE('rtpm') }; typedef ComponentInstance RTPMediaPacketizer; enum { kRTPBaseMediaPacketizerType = FOUR_CHAR_CODE('gnrc'), kRTP261MediaPacketizerType = FOUR_CHAR_CODE('h261'), kRTP263PlusMediaPacketizerType = FOUR_CHAR_CODE('263+'), kRTPAudioMediaPacketizerType = FOUR_CHAR_CODE('soun'), kRTPQTMediaPacketizerType = FOUR_CHAR_CODE('qtim'), kRTPPureVoiceMediaPacketizerType = FOUR_CHAR_CODE('Qclp'), kRTPJPEGMediaPacketizerType = FOUR_CHAR_CODE('jpeg'), kRTPQDesign2MediaPacketizerType = FOUR_CHAR_CODE('QDM2'), kRTPSorensonMediaPacketizerType = FOUR_CHAR_CODE('SVQ1') }; typedef UInt32 RTPMPSampleRef; typedef CALLBACK_API( void , RTPMPDataReleaseProcPtr )(UInt8 *inData, void *inRefCon); typedef STACK_UPP_TYPE(RTPMPDataReleaseProcPtr) RTPMPDataReleaseUPP; enum { kMediaPacketizerCanPackEditRate = 1 << 0, kMediaPacketizerCanPackLayer = 1 << 1, kMediaPacketizerCanPackVolume = 1 << 2, kMediaPacketizerCanPackBalance = 1 << 3, kMediaPacketizerCanPackGraphicsMode = 1 << 4, kMediaPacketizerCanPackEmptyEdit = 1 << 5 }; struct MediaPacketizerRequirements { OSType mediaType; /* media type supported (0 for all)*/ OSType dataFormat; /* data format (e.g., compression) supported (0 for all)*/ UInt32 capabilityFlags; /* ability to handle non-standard track characteristics*/ UInt8 canPackMatrixType; /* can pack any matrix type up to this (identityMatrixType for identity only)*/ UInt8 pad[3]; }; typedef struct MediaPacketizerRequirements MediaPacketizerRequirements; typedef MediaPacketizerRequirements * MediaPacketizerRequirementsPtr; struct MediaPacketizerInfo { OSType mediaType; /* media type supported (0 for all)*/ OSType dataFormat; /* data format (e.g., compression) supported (0 for all)*/ OSType vendor; /* manufacturer of this packetizer (e.g., 'appl' for Apple)*/ UInt32 capabilityFlags; /* ability to handle non-standard track characteristics*/ UInt8 canPackMatrixType; /* can pack any matrix type up to this (identityMatrixType for identity only)*/ UInt8 pad[3]; long characteristicCount; RTPPayloadCharacteristic characteristic[1]; /* after the last characteristic, the payload name (defined by the RTPPayloadInfo*/ /* structure) is present. */ }; typedef struct MediaPacketizerInfo MediaPacketizerInfo; typedef MediaPacketizerInfo * MediaPacketizerInfoPtr; typedef MediaPacketizerInfoPtr * MediaPacketizerInfoHandle; #define MediaPacketizerInfoToPayloadInfo(_mpi) ((RTPPayloadInfoPtr)(&((_mpi)->characteristic[(_mpi)->characteristicCount]))) /* MediaPacketizerInfo structs are padded to 32 bits */ enum { kMediaPacketizerInfoPadUpToBytes = 4 }; EXTERN_API_C( OSErr ) QTSFindMediaPacketizer (MediaPacketizerRequirementsPtr inPacketizerinfo, SampleDescriptionHandle inSampleDescription, RTPPayloadSortRequestPtr inSortInfo, QTAtomContainer * outPacketizerList); EXTERN_API_C( OSErr ) QTSFindMediaPacketizerForTrack (Track inTrack, long inSampleDescriptionIndex, RTPPayloadSortRequestPtr inSortInfo, QTAtomContainer * outPacketizerList); EXTERN_API_C( OSErr ) QTSFindMediaPacketizerForPayloadID (long payloadID, RTPPayloadSortRequestPtr inSortInfo, QTAtomContainer * outPacketizerList); EXTERN_API_C( OSErr ) QTSFindMediaPacketizerForPayloadName (const char * payloadName, RTPPayloadSortRequestPtr inSortInfo, QTAtomContainer * outPacketizerList); /* flags for RTPMPInitialize*/ enum { kRTPMPRealtimeModeFlag = 0x00000001 }; /* flags for RTPMPSampleDataParams*/ enum { kRTPMPSyncSampleFlag = 0x00000001 }; struct RTPMPSampleDataParams { UInt32 version; UInt32 timeStamp; UInt32 duration; /* 0 = unknown duration*/ UInt32 playOffset; Fixed playRate; SInt32 flags; UInt32 sampleDescSeed; Handle sampleDescription; RTPMPSampleRef sampleRef; UInt32 dataLength; const UInt8 * data; RTPMPDataReleaseUPP releaseProc; void * refCon; }; typedef struct RTPMPSampleDataParams RTPMPSampleDataParams; /* out flags for idle, RTPMPSetSampleData, and RTPMPFlush*/ enum { kRTPMPStillProcessingData = 0x00000001 /* not done with data you've got*/ }; struct RTPMPPayloadTypeParams { UInt32 flags; UInt32 payloadNumber; short nameLength; /* in: size of payloadName buffer (counting null terminator) -- this will be reset to needed length and paramErr returned if too small */ char * payloadName; /* caller must provide buffer */ }; typedef struct RTPMPPayloadTypeParams RTPMPPayloadTypeParams; /*----------------------------------------- RTP Media Packetizer Info selectors -----------------------------------------*/ /* info selectors - get only */ enum { kRTPMPPayloadTypeInfo = FOUR_CHAR_CODE('rtpp'), /* RTPMPPayloadTypeParams* */ kRTPMPRTPTimeScaleInfo = FOUR_CHAR_CODE('rtpt'), /* TimeScale* */ kRTPMPRequiredSampleDescriptionInfo = FOUR_CHAR_CODE('sdsc'), /* SampleDescriptionHandle* */ kRTPMPMinPayloadSize = FOUR_CHAR_CODE('mins'), /* UInt32* in bytes, does not include rtp header; default is 0 */ kRTPMPMinPacketDuration = FOUR_CHAR_CODE('mind'), /* UInt3* in milliseconds; default is no min required */ kRTPMPSuggestedRepeatPktCountInfo = FOUR_CHAR_CODE('srpc'), /* UInt32* */ kRTPMPSuggestedRepeatPktSpacingInfo = FOUR_CHAR_CODE('srps'), /* UInt32* in milliseconds */ kRTPMPMaxPartialSampleSizeInfo = FOUR_CHAR_CODE('mpss'), /* UInt32* in bytes */ kRTPMPPreferredBufferDelayInfo = FOUR_CHAR_CODE('prbd'), /* UInt32* in milliseconds */ kRTPMPPayloadNameInfo = FOUR_CHAR_CODE('name') /* StringPtr */ }; /*----------------------------------------- RTP Media Packetizer Characteristics -----------------------------------------*/ /* also supports relevant ones in Movies.h and QTSToolbox.h */ enum { kRTPMPNoSampleDataRequiredCharacteristic = FOUR_CHAR_CODE('nsdr'), kRTPMPPartialSamplesRequiredCharacteristic = FOUR_CHAR_CODE('ptsr'), kRTPMPHasUserSettingsDialogCharacteristic = FOUR_CHAR_CODE('sdlg'), kRTPMPPrefersReliableTransportCharacteristic = FOUR_CHAR_CODE('rely'), kRTPMPRequiresOutOfBandDimensionsCharacteristic = FOUR_CHAR_CODE('robd') }; /*----------------------------------------- RTP Media Packetizer selectors -----------------------------------------*/ enum { kRTPMPInitializeSelect = 0x0500, kRTPMPPreflightMediaSelect = 0x0501, kRTPMPIdleSelect = 0x0502, kRTPMPSetSampleDataSelect = 0x0503, kRTPMPFlushSelect = 0x0504, kRTPMPResetSelect = 0x0505, kRTPMPSetInfoSelect = 0x0506, kRTPMPGetInfoSelect = 0x0507, kRTPMPSetTimeScaleSelect = 0x0508, kRTPMPGetTimeScaleSelect = 0x0509, kRTPMPSetTimeBaseSelect = 0x050A, kRTPMPGetTimeBaseSelect = 0x050B, kRTPMPHasCharacteristicSelect = 0x050C, kRTPMPSetPacketBuilderSelect = 0x050E, kRTPMPGetPacketBuilderSelect = 0x050F, kRTPMPSetMediaTypeSelect = 0x0510, kRTPMPGetMediaTypeSelect = 0x0511, kRTPMPSetMaxPacketSizeSelect = 0x0512, kRTPMPGetMaxPacketSizeSelect = 0x0513, kRTPMPSetMaxPacketDurationSelect = 0x0514, kRTPMPGetMaxPacketDurationSelect = 0x0515, /* for export component and apps who want to*/ /* access dialogs for Media-specific settings*/ /* (such as Pure Voice interleave factor)*/ kRTPMPDoUserDialogSelect = 0x0516, kRTPMPSetSettingsFromAtomContainerAtAtomSelect = 0x0517, kRTPMPGetSettingsIntoAtomContainerAtAtomSelect = 0x0518, kRTPMPGetSettingsAsTextSelect = 0x0519 }; /*----------------------------------------- RTP Media Packetizer functions -----------------------------------------*/ EXTERN_API( ComponentResult ) RTPMPInitialize (RTPMediaPacketizer rtpm, SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0500, 0x7000, 0xA82A); /* return noErr if you can handle this media */ EXTERN_API( ComponentResult ) RTPMPPreflightMedia (RTPMediaPacketizer rtpm, OSType inMediaType, SampleDescriptionHandle inSampleDescription) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0501, 0x7000, 0xA82A); /* do work here if you need to - give up time periodically if you're doing time consuming operations */ EXTERN_API( ComponentResult ) RTPMPIdle (RTPMediaPacketizer rtpm, SInt32 inFlags, SInt32 * outFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0502, 0x7000, 0xA82A); /* caller owns the RTPMPSampleDataParams struct media Packetizer must copy any fields of the struct it wants to keep media Packetizer must call release proc when done with the data you can do the processing work here if it does not take up too much cpu time - otherwise do it in idle */ EXTERN_API( ComponentResult ) RTPMPSetSampleData (RTPMediaPacketizer rtpm, const RTPMPSampleDataParams * inSampleData, SInt32 * outFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0503, 0x7000, 0xA82A); /* send everything you have buffered - you will get idles while you set the kRTPMPStillProcessingData flag here and in idle */ EXTERN_API( ComponentResult ) RTPMPFlush (RTPMediaPacketizer rtpm, SInt32 inFlags, SInt32 * outFlags) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0504, 0x7000, 0xA82A); /* dispose of anything buffered and get rid of state do not send the buffered data (because presumably there is no connection for you to send on) state should be the same as if you were just initialized */ EXTERN_API( ComponentResult ) RTPMPReset (RTPMediaPacketizer rtpm, SInt32 inFlags) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0505, 0x7000, 0xA82A); /*----------------------------------------- RTP Media Packetizer get / set functions -----------------------------------------*/ EXTERN_API( ComponentResult ) RTPMPSetInfo (RTPMediaPacketizer rtpm, OSType inSelector, const void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0506, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPGetInfo (RTPMediaPacketizer rtpm, OSType inSelector, void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0507, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPSetTimeScale (RTPMediaPacketizer rtpm, TimeScale inTimeScale) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0508, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPGetTimeScale (RTPMediaPacketizer rtpm, TimeScale * outTimeScale) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0509, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPSetTimeBase (RTPMediaPacketizer rtpm, TimeBase inTimeBase) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050A, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPGetTimeBase (RTPMediaPacketizer rtpm, TimeBase * outTimeBase) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050B, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPHasCharacteristic (RTPMediaPacketizer rtpm, OSType inSelector, Boolean * outHasIt) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050C, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPSetPacketBuilder (RTPMediaPacketizer rtpm, ComponentInstance inPacketBuilder) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050E, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPGetPacketBuilder (RTPMediaPacketizer rtpm, ComponentInstance * outPacketBuilder) FIVEWORDINLINE(0x2F3C, 0x0004, 0x050F, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPSetMediaType (RTPMediaPacketizer rtpm, OSType inMediaType) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0510, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPGetMediaType (RTPMediaPacketizer rtpm, OSType * outMediaType) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0511, 0x7000, 0xA82A); /* size is in bytes*/ EXTERN_API( ComponentResult ) RTPMPSetMaxPacketSize (RTPMediaPacketizer rtpm, UInt32 inMaxPacketSize) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0512, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPGetMaxPacketSize (RTPMediaPacketizer rtpm, UInt32 * outMaxPacketSize) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0513, 0x7000, 0xA82A); /* duration is in milliseconds*/ EXTERN_API( ComponentResult ) RTPMPSetMaxPacketDuration (RTPMediaPacketizer rtpm, UInt32 inMaxPacketDuration) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0514, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPGetMaxPacketDuration (RTPMediaPacketizer rtpm, UInt32 * outMaxPacketDuration) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0515, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPDoUserDialog (RTPMediaPacketizer rtpm, ModalFilterUPP inFilterUPP, Boolean * canceled) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0516, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPSetSettingsFromAtomContainerAtAtom (RTPMediaPacketizer rtpm, QTAtomContainer inContainer, QTAtom inParentAtom) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0517, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPGetSettingsIntoAtomContainerAtAtom (RTPMediaPacketizer rtpm, QTAtomContainer inOutContainer, QTAtom inParentAtom) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0518, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPMPGetSettingsAsText (RTPMediaPacketizer rtpm, Handle * text) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0519, 0x7000, 0xA82A); /*============================================================================ RTP Packet Builder ============================================================================*/ enum { kRTPPacketBuilderType = FOUR_CHAR_CODE('rtpb') }; typedef ComponentInstance RTPPacketBuilder; typedef struct OpaqueRTPPacketGroupRef* RTPPacketGroupRef; typedef struct OpaqueRTPPacketRef* RTPPacketRef; typedef struct OpaqueRTPPacketRepeatedDataRef* RTPPacketRepeatedDataRef; /* flags for RTPPBBegin/EndPacket, RTPPBBegin/EndPacketGroup*/ enum { kRTPPBSetMarkerFlag = 0x00000001, kRTPPBRepeatPacketFlag = 0x00000002, kRTPPBSyncSampleFlag = 0x00010000, kRTPPBBFrameFlag = 0x00020000, kRTPPBDontSendFlag = 0x10000000 /* when set in EndPacketGroup, will not add group*/ }; enum { kRTPPBUnknownPacketMediaDataLength = 0 }; typedef CALLBACK_API( void , RTPPBCallbackProcPtr )(OSType inSelector, void *ioParams, void *inRefCon); typedef STACK_UPP_TYPE(RTPPBCallbackProcPtr) RTPPBCallbackUPP; /*----------------------------------------- RTP Packet Builder selectors -----------------------------------------*/ enum { kRTPPBBeginPacketGroupSelect = 0x0500, kRTPPBEndPacketGroupSelect = 0x0501, kRTPPBBeginPacketSelect = 0x0502, kRTPPBEndPacketSelect = 0x0503, kRTPPBAddPacketLiteralDataSelect = 0x0504, kRTPPBAddPacketSampleDataSelect = 0x0505, kRTPPBAddPacketRepeatedDataSelect = 0x0506, kRTPPBReleaseRepeatedDataSelect = 0x0507, kRTPPBSetPacketSequenceNumberSelect = 0x0508, kRTPPBGetPacketSequenceNumberSelect = 0x0509, kRTPPBSetCallbackSelect = 0x050A, kRTPPBGetCallbackSelect = 0x050B, kRTPPBSetInfoSelect = 0x050C, kRTPPBGetInfoSelect = 0x050D }; /*----------------------------------------- RTP Packet Builder functions -----------------------------------------*/ EXTERN_API( ComponentResult ) RTPPBBeginPacketGroup (RTPPacketBuilder rtpb, SInt32 inFlags, UInt32 inTimeStamp, RTPPacketGroupRef * outPacketGroup) FIVEWORDINLINE(0x2F3C, 0x000C, 0x0500, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPPBEndPacketGroup (RTPPacketBuilder rtpb, SInt32 inFlags, RTPPacketGroupRef inPacketGroup) FIVEWORDINLINE(0x2F3C, 0x0008, 0x0501, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPPBBeginPacket (RTPPacketBuilder rtpb, SInt32 inFlags, RTPPacketGroupRef inPacketGroup, UInt32 inPacketMediaDataLength, RTPPacketRef * outPacket) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0502, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPPBEndPacket (RTPPacketBuilder rtpb, SInt32 inFlags, RTPPacketGroupRef inPacketGroup, RTPPacketRef inPacket, UInt32 inTimeOffset, UInt32 inDuration) FIVEWORDINLINE(0x2F3C, 0x0014, 0x0503, 0x7000, 0xA82A); /* non-NULL RTPPacketRepeatedDataRef means this data will be repeated later pb must return a repeated data ref */ EXTERN_API( ComponentResult ) RTPPBAddPacketLiteralData (RTPPacketBuilder rtpb, SInt32 inFlags, RTPPacketGroupRef inPacketGroup, RTPPacketRef inPacket, UInt8 * inData, UInt32 inDataLength, RTPPacketRepeatedDataRef * outDataRef) FIVEWORDINLINE(0x2F3C, 0x0018, 0x0504, 0x7000, 0xA82A); /* non-NULL RTPPacketRepeatedDataRef means this data will be repeated later pb must return a repeated data ref */ EXTERN_API( ComponentResult ) RTPPBAddPacketSampleData (RTPPacketBuilder rtpb, SInt32 inFlags, RTPPacketGroupRef inPacketGroup, RTPPacketRef inPacket, RTPMPSampleDataParams * inSampleDataParams, UInt32 inSampleOffset, UInt32 inSampleDataLength, RTPPacketRepeatedDataRef * outDataRef) FIVEWORDINLINE(0x2F3C, 0x001C, 0x0505, 0x7000, 0xA82A); /* call to add the repeated data using the ref you got from RTPPBAddPacketLiteralData or RTPPBAddPacketSampleData */ EXTERN_API( ComponentResult ) RTPPBAddPacketRepeatedData (RTPPacketBuilder rtpb, SInt32 inFlags, RTPPacketGroupRef inPacketGroup, RTPPacketRef inPacket, RTPPacketRepeatedDataRef inDataRef) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0506, 0x7000, 0xA82A); /* call when done with repeated data*/ EXTERN_API( ComponentResult ) RTPPBReleaseRepeatedData (RTPPacketBuilder rtpb, RTPPacketRepeatedDataRef inDataRef) FIVEWORDINLINE(0x2F3C, 0x0004, 0x0507, 0x7000, 0xA82A); /* seq number is just relative seq number don't call if you don't care when seq # is used */ EXTERN_API( ComponentResult ) RTPPBSetPacketSequenceNumber (RTPPacketBuilder rtpb, SInt32 inFlags, RTPPacketGroupRef inPacketGroup, RTPPacketRef inPacket, UInt32 inSequenceNumber) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0508, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPPBGetPacketSequenceNumber (RTPPacketBuilder rtpb, SInt32 inFlags, RTPPacketGroupRef inPacketGroup, RTPPacketRef inPacket, UInt32 * outSequenceNumber) FIVEWORDINLINE(0x2F3C, 0x0010, 0x0509, 0x7000, 0xA82A); /* used for communicating with the caller of the media packetizers if needed NOT used for communicating with the media packetizers themselves */ EXTERN_API( ComponentResult ) RTPPBSetCallback (RTPPacketBuilder rtpb, RTPPBCallbackUPP inCallback, void * inRefCon) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050A, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPPBGetCallback (RTPPacketBuilder rtpb, RTPPBCallbackUPP * outCallback, void ** outRefCon) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050B, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPPBSetInfo (RTPPacketBuilder rtpb, OSType inSelector, void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050C, 0x7000, 0xA82A); EXTERN_API( ComponentResult ) RTPPBGetInfo (RTPPacketBuilder rtpb, OSType inSelector, void * ioParams) FIVEWORDINLINE(0x2F3C, 0x0008, 0x050D, 0x7000, 0xA82A); /* UPP call backs */ #if OPAQUE_UPP_TYPES EXTERN_API(RTPMPDataReleaseUPP) NewRTPMPDataReleaseUPP (RTPMPDataReleaseProcPtr userRoutine); EXTERN_API(RTPPBCallbackUPP) NewRTPPBCallbackUPP (RTPPBCallbackProcPtr userRoutine); EXTERN_API(void) DisposeRTPMPDataReleaseUPP (RTPMPDataReleaseUPP userUPP); EXTERN_API(void) DisposeRTPPBCallbackUPP (RTPPBCallbackUPP userUPP); EXTERN_API(void) InvokeRTPMPDataReleaseUPP (UInt8 * inData, void * inRefCon, RTPMPDataReleaseUPP userUPP); EXTERN_API(void) InvokeRTPPBCallbackUPP (OSType inSelector, void * ioParams, void * inRefCon, RTPPBCallbackUPP userUPP); #else enum { uppRTPMPDataReleaseProcInfo = 0x000003C0 }; /* pascal no_return_value Func(4_bytes, 4_bytes) */ enum { uppRTPPBCallbackProcInfo = 0x00000FC0 }; /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes) */ #define NewRTPMPDataReleaseUPP(userRoutine) (RTPMPDataReleaseUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppRTPMPDataReleaseProcInfo, GetCurrentArchitecture()) #define NewRTPPBCallbackUPP(userRoutine) (RTPPBCallbackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppRTPPBCallbackProcInfo, GetCurrentArchitecture()) #define DisposeRTPMPDataReleaseUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeRTPPBCallbackUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define InvokeRTPMPDataReleaseUPP(inData, inRefCon, userUPP) CALL_TWO_PARAMETER_UPP((userUPP), uppRTPMPDataReleaseProcInfo, (inData), (inRefCon)) #define InvokeRTPPBCallbackUPP(inSelector, ioParams, inRefCon, userUPP) CALL_THREE_PARAMETER_UPP((userUPP), uppRTPPBCallbackProcInfo, (inSelector), (ioParams), (inRefCon)) #endif /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */ #define NewRTPMPDataReleaseProc(userRoutine) NewRTPMPDataReleaseUPP(userRoutine) #define NewRTPPBCallbackProc(userRoutine) NewRTPPBCallbackUPP(userRoutine) #define CallRTPMPDataReleaseProc(userRoutine, inData, inRefCon) InvokeRTPMPDataReleaseUPP(inData, inRefCon, userRoutine) #define CallRTPPBCallbackProc(userRoutine, inSelector, ioParams, inRefCon) InvokeRTPPBCallbackUPP(inSelector, ioParams, inRefCon, userRoutine) #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __QTSTREAMINGCOMPONENTS__ */